package com.zh.work.jy;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zh.work.util.jy.AesUtil;
import com.zh.work.util.jy.Base64ImgUtil;
import com.zh.work.util.jy.ClientUtil;
import com.zh.work.util.jy.JYMD5;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

import static com.zh.work.util.jy.CardUtil.cardValid;


/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description: 身份证OCR
 * @Author: Liard
 * @Create in: 2020/6/29 10:05
 * @Version: 1.0.1
 */
public class IdData {
    private static final Logger log = LoggerFactory.getLogger(IdData.class);

    private static final String strUrl = "https://101.52.254.188:8443/ocr/idCard/ai";
    private static final String scene_code = "03";//商户应用场景编号
    private static final String pact_no = "FHB20200619_001";//协议版本号
    private static final String strLicense = "72C8B639ABA498ADB2F5998080C3ADCD";//接口授权
    private static final String strAppsecret = "b67a3442a8bb72bb8deb26ecbef09479";//应用密码


    public static void main(String[] args) {
        /*String strTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());//时间
        String pact_sign = JYMD5.MD5Encoder("123"); //自定义用户授权 限制40字符以内
        String photo = JYMD5.encrypt(Base64ImgUtil.GetImageStr("F:\\zh-cloud-elec\\zh-cloud-work-service\\src\\main\\resources\\img\\id_card.jpg"));//身份证照片
        String card_type = "0";//0为 人像面  1为国徽面
        String head_option = "1";//是否返回头像开关 0 关闭 1打开
        String strSys_req_sn = "IdCard_ocr";
        String pact_trade_no = "**协议授权流水号**";//C端用户授权编码

        new IdData().OCR(strUrl, pact_sign, card_type, head_option, photo, strSys_req_sn, strTime,
                pact_trade_no);*/
        System.out.println(cardValid("6259654187031504"));
    }




    public void OCR(String strUrl, String pact_sign, String card_type, String head_option, String photo,
                    String strSys_req_sn, String strTime, String pact_trade_no) {
        try {
            JSONObject param = new JSONObject();
            param.put("card_type", card_type);
            param.put("head_option", head_option);
            param.put("photo", photo);

            JSONObject par = new JSONObject();
            par.put("biz_content", param);
            par.put("license_code", strLicense);
            par.put("scene_code", scene_code);
            par.put("pact_no", pact_no);
            par.put("pact_trade_no", pact_trade_no);
            par.put("pact_sign", pact_sign);

            par.put("sys_req_sn", strSys_req_sn);
            par.put("timestamp", strTime);
            String sign = JYMD5.createSignature(par, strAppsecret);
            par.put("sign", sign);
            par.put("biz_content", param);

            String result = ClientUtil.post(strUrl, par.toString());
            System.out.println(result);
            //解密详情信息
            JSONObject js = JSON.parseObject(result);
            if (js.getJSONObject("jy_response").getString("data") != null) {
                String data_info = js.getJSONObject("jy_response").getString("data");
                JSONObject info = JSON.parseObject(data_info);
                String head_photo = JYMD5.decrypt(info.get("head_photo").toString());
                String name = AesUtil.decrypt(info.get("name").toString(), strAppsecret);
                String certid = AesUtil.decrypt(info.get("certid").toString(), strAppsecret);
                String address = AesUtil.decrypt(info.get("address").toString(), strAppsecret);
                System.out.println("头--->" + head_photo);
                System.out.println("名--->" + name);
                System.out.println("号--->" + certid);
                System.out.println("址--->" + address);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
